我正在遵循 Google tutorial 中给出的示例为我的 Android 应用程序创建一个 Google App Engine 后端。 教程中MainActivity如下:
import java.io.IOException;
import java.util.Date;
import android.os.AsyncTask;
import android.content.Context;
import com.cloudnotes.noteendpoint.Noteendpoint;
import com.cloudnotes.noteendpoint.model.Note;
import com.google.api.client.extensions.android.http.AndroidHttp;
import com.google.api.client.http.HttpRequest;
import com.google.api.client.http.HttpRequestInitializer;
import com.google.api.client.json.jackson.JacksonFactory;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new EndpointsTask().execute(getApplicationContext());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
public class EndpointsTask extends AsyncTask<Context, Integer, Long> {
protected Long doInBackground(Context... contexts) {
Noteendpoint.Builder endpointBuilder = new Noteendpoint.Builder(
AndroidHttp.newCompatibleTransport(),
new JacksonFactory(),
new HttpRequestInitializer() {
public void initialize(HttpRequest httpRequest) { }
});
Noteendpoint endpoint = CloudEndpointUtils.updateBuilder(
endpointBuilder).build();
try {
Note note = new Note().setDescription("Note Description");
String noteID = new Date().toString();
note.setId(noteID);
note.setEmailAddress("E-Mail Address");
Note result = endpoint.insertNote(note).execute();
} catch (IOException e) {
e.printStackTrace();
}
return (long) 0;
}
}
}
这工作正常,每次运行应用程序时都会创建实体。因此我通过添加 textfields
来修改它以获取 description
和 email
来自用户并将其作为新的 MainActivity
public class MainActivity extends Activity implements View.OnClickListener{
EditText descriptionTF;
EditText emailTF;
Button submitBtn;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
submitBtn = (Button) findViewById(R.id.submitButton);
descriptionTF = (EditText) findViewById(R.id.descriptionTextField);
emailTF = (EditText) findViewById(R.id.emailTextField);
}
public class EndpointsTask extends AsyncTask<Context, Integer, Long> {
protected Long doInBackground(Context... contexts) {
Noteendpoint.Builder endpointBuilder = new Noteendpoint.Builder(
AndroidHttp.newCompatibleTransport(),
new JacksonFactory(),
new HttpRequestInitializer() {
public void initialize(HttpRequest httpRequest) { }
});
Noteendpoint endpoint = CloudEndpointUtils.updateBuilder(
endpointBuilder).build();
String descrptn = descriptionTF.getText().toString();
String email = emailTF.getText().toString();
String noteID = new Date().toString();
try {
Note note = new Note();
note.setDescription(descrptn);
note.setId(noteID);
note.setEmailAddress(email);
Note result = endpoint.insertNote(note).execute();
} catch (IOException e) {
e.printStackTrace();
}
return (long) 0;
}
}
@Override
public void onClick(View v) {
if (v.getId()== R.id.submitButton) {
new EndpointsTask().execute(getApplicationContext());
}
}
}
现在,当我单击提交
按钮时,什么也没有发生。
我猜问题出在我从 onClick()
方法而不是 onCreate() 调用
方法,就像教程中所做的那样。有人知道解决这个问题的方法吗?new EndpointsTask().execute(getApplicationContext());
最佳答案
最终通过将 onClick()
方法移动到 onCreate()
方法解决了这个问题,如下所示:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
submitBtn = (Button) findViewById(R.id.submitButton);
descriptionTF = (EditText) findViewById(R.id.descriptionTextField);
emailTF = (EditText) findViewById(R.id.emailTextField);
submitBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (v.getId()== R.id.submitButton) {
new EndpointsTask().execute(getApplicationContext());
}
}
});
}
关于java - 无法将实体从 Android 应用程序保存到 Google App Engine 后端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21666872/