2014-07-07 48 views
-1

我試圖通過web服務(在php中使用特定url)連接到mysql數據庫並使用AsyncTask。我嘗試通過web服務和AsyncTask連接到mysql

我運行應用程序並關閉時得到一個錯誤,告訴我說:「不幸的是出現了錯誤」

沒有日誌讀取非常好,爲此我尋求幫助,並Aque'm也首發在android中編程。

感謝您的幫助。 fragment_main.xml的

MainActivity.java 

    package com.example.pruebaenviarvariables; 

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

    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.app.Activity; 
    import android.content.pm.ActivityInfo; 
    import android.os.AsyncTask; 
    import android.os.Bundle; 
    import android.view.View; 
    import android.view.View.OnClickListener; 
    import android.widget.Button; 
    import android.widget.EditText; 
    import android.widget.ImageButton; 
    import android.widget.Toast; 

    import com.example.pruebaenviarvariables.R; 

    public class MainActivity extends Activity { 
     private EditText dni; 
     private EditText nombre; 
     private EditText telefono; 
     private EditText email; 
     private Button insertar; 
     private Button mostrar; 
     private ImageButton mas; 
     private ImageButton menos; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT); 
      setContentView(R.layout.activity_main); 

      EditText dni=(EditText)findViewById(R.id.dni); 
      EditText nombre=(EditText)findViewById(R.id.nombre); 
      EditText telefono=(EditText)findViewById(R.id.telefono); 
      EditText email=(EditText)findViewById(R.id.email);  
      //Insertamos los datos de la persona. 
      Button insertar=(Button)findViewById(R.id.insertar);  
      insertar.setOnClickListener(new OnClickListener(){ 

       @Override 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 

         new Insertar(MainActivity.this).execute();  

       } 

      }); 

     } 

     //Inserta los datos de las Personas en el servidor. 
      private boolean insertar(){ 
       HttpClient httpclient; 
       List<NameValuePair> nameValuePairs; 
       HttpPost httppost; 
       httpclient=new DefaultHttpClient(); 
       httppost= new HttpPost("http://192.168.0.11/pruebaAndroid/insert.php"); // Url del Servidor  
       //Añadimos nuestros datos 
       nameValuePairs = new ArrayList<NameValuePair>(4); 
       nameValuePairs.add(new BasicNameValuePair("dni",dni.getText().toString().trim())); 
       nameValuePairs.add(new BasicNameValuePair("nombre",nombre.getText().toString().trim())); 
       nameValuePairs.add(new BasicNameValuePair("telefono",telefono.getText().toString().trim())); 
       nameValuePairs.add(new BasicNameValuePair("email",email.getText().toString().trim())); 

       try { 
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
        httpclient.execute(httppost); 
        return true; 
       } catch (UnsupportedEncodingException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } catch (ClientProtocolException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
       return false; 
      }  
      //AsyncTask para insertar Personas 
      class Insertar extends AsyncTask<String,String,String>{ 

       private Activity context; 

       Insertar(Activity context){ 
        this.context=context; 
       } 
       @Override 
       protected String doInBackground(String... params) { 
        // TODO Auto-generated method stub 
        if(insertar()) 
         context.runOnUiThread(new Runnable(){ 
          @Override 
          public void run() { 
           // TODO Auto-generated method stub       
           Toast.makeText(context, "Persona insertada con éxito", Toast.LENGTH_LONG).show(); 
           nombre.setText(""); 
           dni.setText(""); 
           telefono.setText(""); 
           email.setText(""); 
          }      
         }); 
        else 
         context.runOnUiThread(new Runnable(){ 
          @Override 
          public void run() { 
           // TODO Auto-generated method stub       
           Toast.makeText(context, "Persona no insertada con éxito", Toast.LENGTH_LONG).show(); 
          }     
         }); 
         return null; 
       }   
      } 
    } 

代碼

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/LinearLayout1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:background="@android:color/white" > 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="nombre" /> 

    <EditText 
     android:id="@+id/nombre" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:ems="10" 
     android:inputType="text"> 

     <requestFocus /> 
    </EditText> 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="dni" /> 

    <EditText 
     android:id="@+id/dni" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:ems="10" 
     android:inputType="text" /> 

    <TextView 
     android:id="@+id/textView2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="tlf" /> 

    <EditText 
     android:id="@+id/telefono" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:ems="10" 
     android:inputType="number" /> 

    <TextView 
     android:id="@+id/textView3" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="email" /> 

    <EditText 
     android:id="@+id/email" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:ems="10" 
     android:inputType="textEmailAddress" /> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" > 

     <Button 
      android:id="@+id/insertar" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="2" 
      android:text="insertar" /> 

    </LinearLayout> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="20dp" > 

    </LinearLayout> 

</LinearLayout> 

最後,日誌:

6 21:20:43.371: D/AndroidRuntime(1163): Shutting down VM 
    07-06 21:20:43.371: W/dalvikvm(1163): threadid=1: thread exiting with uncaught exception (group=0xb3a5bba8) 
    07-06 21:20:43.391: E/AndroidRuntime(1163): FATAL EXCEPTION: main 
    07-06 21:20:43.391: E/AndroidRuntime(1163): Process: com.example.pruebaenviarvariables, PID: 1163 
    07-06 21:20:43.391: E/AndroidRuntime(1163): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.pruebaenviarvariables/com.example.pruebaenviarvariables.MainActivity}: java.lang.NullPointerException 
    07-06 21:20:43.391: E/AndroidRuntime(1163):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195) 
    07-06 21:20:43.391: E/AndroidRuntime(1163):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 
    07-06 21:20:43.391: E/AndroidRuntime(1163):  at android.app.ActivityThread.access$800(ActivityThread.java:135) 
    07-06 21:20:43.391: E/AndroidRuntime(1163):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
    07-06 21:20:43.391: E/AndroidRuntime(1163):  at android.os.Handler.dispatchMessage(Handler.java:102) 
    07-06 21:20:43.391: E/AndroidRuntime(1163):  at android.os.Looper.loop(Looper.java:136) 
    07-06 21:20:43.391: E/AndroidRuntime(1163):  at android.app.ActivityThread.main(ActivityThread.java:5017) 
    07-06 21:20:43.391: E/AndroidRuntime(1163):  at java.lang.reflect.Method.invokeNative(Native Method) 
    07-06 21:20:43.391: E/AndroidRuntime(1163):  at java.lang.reflect.Method.invoke(Method.java:515) 
    07-06 21:20:43.391: E/AndroidRuntime(1163):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
    07-06 21:20:43.391: E/AndroidRuntime(1163):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
    07-06 21:20:43.391: E/AndroidRuntime(1163):  at dalvik.system.NativeStart.main(Native Method) 
    07-06 21:20:43.391: E/AndroidRuntime(1163): Caused by: java.lang.NullPointerException 
    07-06 21:20:43.391: E/AndroidRuntime(1163):  at com.example.pruebaenviarvariables.MainActivity.onCreate(MainActivity.java:51) 
    07-06 21:20:43.391: E/AndroidRuntime(1163):  at android.app.Activity.performCreate(Activity.java:5231) 
    07-06 21:20:43.391: E/AndroidRuntime(1163):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
    07-06 21:20:43.391: E/AndroidRuntime(1163):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159) 
    07-06 21:20:43.391: E/AndroidRuntime(1163):  ... 11 more 
    07-06 21:20:46.851: I/Process(1163): Sending signal. PID: 1163 SIG: 9 

回答

0

正如你所定義的所有佈局變量(EditText上,按鈕等)的一流水平。在onCreate()方法中,您尚未使用這些對象,並重新創建它。所以你在onCreate()中創建和設置對象不可用於UI線程。 UI線程僅訪問類級變量。

解決方案:不要在oncreate()中重新定義相同的佈局變量,請在此方法中使用類級別的對象。

代碼MainActivity:

private EditText dni; 
    private EditText nombre; 
    private EditText telefono; 
    private EditText email; 
    private Button insertar; 
    private Button mostrar; 
    private ImageButton mas; 
    private ImageButton menos; 
    private EditText dni; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT); 
     setContentView(R.layout.activity_main); 

     dni=(EditText)findViewById(R.id.dni); 
     nombre=(EditText)findViewById(R.id.nombre); 
     telefono=(EditText)findViewById(R.id.telefono); 
     email=(EditText)findViewById(R.id.email);  
     //Insertamos los datos de la persona. 
     insertar=(Button)findViewById(R.id.insertar); 

//其他代碼.......

XML文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/LinearLayout1" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
android:background="@android:color/white" > 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="nombre" /> 

<EditText 
    android:id="@+id/nombre" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:ems="10" 
    android:inputType="text"> 

    <requestFocus /> 
</EditText> 

<TextView 
    android:id="@+id/textView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="dni" /> 

<EditText 
    android:id="@+id/dni" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:ems="10" 
    android:inputType="text" /> 

<TextView 
    android:id="@+id/textView2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="tlf" /> 

<EditText 
    android:id="@+id/telefono" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:ems="10" 
    android:inputType="number" /> 

<TextView 
    android:id="@+id/textView3" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="email" /> 

<EditText 
    android:id="@+id/email" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:ems="10" 
    android:inputType="textEmailAddress" /> 

    <Button 
     android:id="@+id/insertar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="2" 
     android:text="insertar" /> 


<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="20dp" > 

</LinearLayout> 

</LinearLayout>    
+0

您好 謝謝您的回答。我按照您的建議更正了代碼,但是當我運行該應用程序時,會停止消息。這是我得到的日誌: http://launidad.co/pruebaAndroid/log.JPG – user3810167

+1

雖然51行是你的MainActivity? –

+0

這是我的第51行:insertar.setOnClickListener(new OnClickListener(){ – user3810167

相關問題