我想通过http响应中的post方法将数据从我们的Android应用程序传递到网站。
我现在想要的是 - 我给了一个添加按钮,如果我单击添加它会打开一个编辑活动,其中包含编辑文本和保存按钮,键入一些数据或文本,然后单击它必须转到的保存按钮网站,我不再需要db了。从我们的应用程序发送或发布网站数据。
Mainactivity.java
public class MainActivity extends ListActivity implements FetchDataListener
{
private static final int ACTIVITY_CREATE=0;
private ProgressDialog dialog;
private ProjectsDbAdapter mDbHelper;
private SimpleCursorAdapter dataAdapter;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_list_item);
mDbHelper = new ProjectsDbAdapter(this);
mDbHelper.open();
//fillData();
//registerForContextMenu(getListView());
initView();
}
private void initView()
{
// show progress dialog
dialog = ProgressDialog.show(this, "", "Loading...");
String url = "http://floating-wildwood-1154.herokuapp.com/posts.json";
FetchDataTask task = new FetchDataTask(this);
task.execute(url);
mDbHelper.open();
Cursor projectsCursor = mDbHelper.fetchAllProjects();
//startManagingCursor(projectsCursor);
// Create an array to specify the fields we want to display in the list (only TITLE)
String[] from = new String[]{ProjectsDbAdapter.KEY_TITLE};
// and an array of the fields we want to bind those fields to (in this case just text1)
int[] to = new int[]{R.id.text1};
/* Now create a simple cursor adapter and set it to display
SimpleCursorAdapter projects =
new SimpleCursorAdapter(this, R.layout.activity_row, projectsCursor, from, to);
setListAdapter(projects);
*/
// create the adapter using the cursor pointing to the desired data
//as well as the layout information
dataAdapter = new SimpleCursorAdapter(
this, R.layout.activity_row,
projectsCursor,
from,
to,
0);
setListAdapter(dataAdapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
//getMenuInflater().inflate(R.menu.activity_main, menu);
super.onCreateOptionsMenu(menu);
MenuInflater mi = getMenuInflater();
mi.inflate(R.menu.activity_main, menu);
return true;
}
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
createProject();
return super.onMenuItemSelected(featureId, item);
}
private void createProject() {
Intent i = new Intent(this, ProjectEditActivity.class);
startActivityForResult(i, ACTIVITY_CREATE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
initView();
}
@Override
public void onFetchComplete(List<Application> data)
{
// dismiss the progress dialog
if ( dialog != null )
dialog.dismiss();
// create new adapter
ApplicationAdapter adapter = new ApplicationAdapter(this, data);
// set the adapter to list
setListAdapter(adapter);
}
@Override
public void onFetchFailure(String msg)
{
// dismiss the progress dialog
if ( dialog != null )
dialog.dismiss();
// show failure message
Toast.makeText(this, msg, Toast.LENGTH_LONG).show();
}
}
projecteditactivity.java
public class ProjectEditActivity extends Activity {
private EditText mTitleText;
private Button mConfirmButton;
private Long mRowId;
private ProjectsDbAdapter mDbHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mDbHelper = new ProjectsDbAdapter(this);
setContentView(R.layout.activity_project_edit);
mTitleText = (EditText) findViewById(R.id.title);
mConfirmButton = (Button) findViewById(R.id.confirm);
mRowId = savedInstanceState != null ? savedInstanceState.getLong(ProjectsDbAdapter.KEY_ROWID)
: null;
registerButtonListenersAndSetDefaultText();
}
private void setRowIdFromIntent() {
if (mRowId == null || mRowId.longValue() == 0) {
Bundle extras = getIntent().getExtras();
mRowId = extras != null ? extras.getLong(ProjectsDbAdapter.KEY_ROWID)
: null;
}
}
@Override
protected void onPause() {
super.onPause();
mDbHelper.close();
}
@Override
protected void onResume() {
super.onResume();
mDbHelper.open();
setRowIdFromIntent();
populateFields();
}
private void registerButtonListenersAndSetDefaultText() {
mConfirmButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
saveState();
setResult(RESULT_OK);
Toast.makeText(ProjectEditActivity.this, getString(R.string.task_saved_message), Toast.LENGTH_SHORT).show();
finish();
}
});
}
private void populateFields() {
if (mRowId != null) {
Cursor Project = mDbHelper.fetchProject(mRowId);
startManagingCursor(Project);
mTitleText.setText(Project.getString(
Project.getColumnIndexOrThrow(ProjectsDbAdapter.KEY_TITLE)));
Project.close();
}
else {
// This is a new task - add defaults from preferences if set.
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
String defaultTitleKey = getString(R.string.pref_task_title_key);
String defaultTitle = prefs.getString(defaultTitleKey, null);
if(defaultTitle != null)
mTitleText.setText(defaultTitle);
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putLong(ProjectsDbAdapter.KEY_ROWID, mRowId);
}
private void saveState() {
String title = mTitleText.getText().toString();
//if (mRowId == null)
if (mRowId == null || mRowId.longValue() == 0)
{
long id = mDbHelper.createProject(title);
if (id > 0) {
mRowId = id;
}
} else {
mDbHelper.updateProject(mRowId, title);
}
}
}
这里我使用db,但我不想在我的应用程序中使用db,我在编辑文本中输入什么,单击保存按钮后,它必须传递或发送数据到服务器,我该怎么办?我的应用程序中的那个。
答案 0 :(得分:1)
要将数据发送到网站,您可以尝试在点击监听器上调用此功能:
protected void sendDatas() {
mRegisterTask = new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("YourURL");
try {
// Add your data
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);//Modify this number with the number of parameter you want to send
nameValuePairs.add(new BasicNameValuePair("PostParamName", "PostParamValue"));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
// Execute HTTP Post Request
HttpResponse httpResponse = httpclient.execute(httppost);
// JSON parse
String response = EntityUtils.toString(httpResponse.getEntity());
Log.i("httpResponse", response);
//do something with response if needed
} catch (ClientProtocolException e) {
Log.e("httpclient", "Error ClientProtocolException: " + e.getMessage());
} catch (IOException e) {
Log.e("httpclient", "Error IOException: " + e.getMessage());
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
mRegisterTask = null;
}
};
mRegisterTask.execute(null, null, null);
}
声明mRegisterTask,如AsyncTask<Void, Void, Void> mRegisterTask;
希望这有帮助。
答案 1 :(得分:1)
这是发送到服务器的方法:
public String sendPostRequest(String url) {
String result = null;
URI wrapperUrl;
try {
wrapperUrl = new URI(url);
HttpParams httpParameters = new BasicHttpParams();
int timeoutConnection = 20000;
HttpConnectionParams.setConnectionTimeout(httpParameters,
timeoutConnection);
// Set the default socket timeout (SO_TIMEOUT)
// in milliseconds which is the timeout for waiting for data.
int timeoutSocket = 20000;
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
HttpPost post = new HttpPost(wrapperUrl);
post.setParams(httpParameters);
HttpResponse response = getDefaultClient().execute(post);
HttpEntity responseEntity = response.getEntity();
String result = EntityUtils.toString(responseEntity);
responseEntity.consumeContent();
result = new JSONObject(jsonResultString);
} catch (URISyntaxException e) {
Logger.debug(TAG, "Exception: " + e.toString());
e.printStackTrace();
} catch (ClientProtocolException e) {
Logger.debug(TAG, "Exception: " + e.toString());
e.printStackTrace();
} catch (IOException e) {
Logger.debug(TAG, "Exception: " + e.toString());
e.printStackTrace();
}
return result;
}
提醒,在工作线程中使用它:
private void registerButtonListenersAndSetDefaultText() {
mConfirmButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
saveState();
sendQuestToServer();
setResult(RESULT_OK);
Toast.makeText(ProjectEditActivity.this, getString(R.string.task_saved_message), Toast.LENGTH_SHORT).show();
finish();
}
});
}
private void sendQuestToServer() {
new Thread(new Runnale() {
@Override void run() {
String url = yourServerUrl + youreditText.getText.toString();
sendQuestToServer(url);
}
}).start();
}
答案 2 :(得分:0)
Use the HttpClient or HttpPost;
like this
HttpPost post = new HttpPost(serverURL);
HttpResponse response = new DefaultHttpClient().execute(post);
int sCode = response.getStatusLine().getStatusCode();
if (sCode == HttpStatus.SC_OK) {
return response.getEntity();
} else
throw new Exception("StatusCode is " + sCode);