2014-02-03 3 views
0

Я новичок в Android и искал в Интернете, пытаясь найти способ опубликовать некоторые данные на php. Все, что я хочу сделать, это отправить одну строку. Используя то, что я мог бы найти я придумал следующееAndroid Асинхронные запросы HTTP

Вот что у меня есть

package uk..........; 

import java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 

import org.apache.http.HttpResponse; 
import org.apache.http.NameValuePair; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.entity.UrlEncodedFormEntity; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.message.BasicNameValuePair; 

import android.annotation.SuppressLint; 
import android.app.Activity; 
import android.content.DialogInterface; 
import android.content.DialogInterface.OnClickListener; 
import android.content.Intent; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Toast; 

public class MainMenu extends Activity implements OnClickListener{ 

    @SuppressLint("NewApi") 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main_menu); 
    } 

    /** Called when the user clicks the About button */ 
    public void openAbout(View view) {  
     // Do something in response to button } 
     Intent intent = new Intent(this, DisplayAbout.class); 
     startActivity(intent); 
    } 
    /** Called when the user clicks the Graph button */ 
    public void openGraph(View view) {  
     // Do something in response to button } 
     Intent intent = new Intent(this, DisplayGraph.class); 
     startActivity(intent); 
    } 
    /** Called when the user clicks the Test button */ 
    public void openTest(View view) {  
     // Do something in response to button } 
     Intent intent = new Intent(this, DisplayTest.class); 
     startActivity(intent); 
    } 

    public void sendData(View v) { 

     new MyAsyncTask().execute("Hello World"); 
    } 

    private class MyAsyncTask extends AsyncTask<String, Integer, Double>{ 

     @Override 
     protected Double doInBackground(String... params) { 
      // TODO Auto-generated method stub 
      postData(params[0]); 
      return null; 
     } 

     protected void onPostExecute(Double result){ 
      Toast.makeText(getApplicationContext(), "command sent", Toast.LENGTH_LONG).show(); 
     } 

     public void postData(String valueIWantToSend) { 
      // Create a new HttpClient and Post Header 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpPost httppost = new HttpPost("http://......../receiver.php"); 

      try { 
       // Add your data 
       List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
       nameValuePairs.add(new BasicNameValuePair("myHttpData", valueIWantToSend)); 
       httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

       // Execute HTTP Post Request 
       HttpResponse response = httpclient.execute(httppost); 

      } catch (ClientProtocolException e) { 
       // TODO Auto-generated catch block 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
      } 
     } 

    } 

    @Override 
    public void onClick(DialogInterface arg0, int arg1) { 
     // TODO Auto-generated method stub 

    } 

} 

Я знаю, что код PHP работает как я попробовал его с помощью формы HTML, но когда я запускаю этого приложение падает и закрывается. В коде нет ошибок, и на данный момент я пытаюсь заставить эмулятор в Eclipse работать, но без радости, чтобы это не помогло.

Любые идеи относительно того, что я делаю неправильно?

+1

Вы можете разместить трассировки стека? – quinnjn

+0

Вы добавили разрешение на доступ к манифесту ?: Tobiel

+0

Это именно то, чего мне не хватало, теперь это работает! Спасибо Тобиэлю, огромная помощь! –

ответ

0

Без StackTrace трудно сказать, где ошибка, но попробуйте использовать ActivityContext вместо ApplicationContext, как это:

Toast.makeText(MainMenu.this, "command sent", Toast.LENGTH_LONG).show(); 
Смежные вопросы