2016-04-22 19 views
0

Androidプログラミングの新機能で、PHPとJSONを使用してAndroidアプリからラズベリーパイに2つのeditTextフィールドのテキストを送信しようとしています。 すべてがうまくいき、データをデータベースで見ることができますが、唯一の問題はアプリでSENDボタンをクリックしても何もしないことです。しかし、SENDボタンの近くのどこかをクリックすると、データが送信されます。 activity_main.xmlで定義されたレイアウトファイルからonClickメソッドを使用しました。 ここに私のMainActivity.javaコードです:ボタンがAndroidアプリで正常に動作しない

public class MainActivity extends AppCompatActivity { 

    private ProgressDialog pDialog; 

    JSONParser jsonParser = new JSONParser(); 

    EditText editText; 
    EditText editText2; 
    Button button; 
    private View view; 

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

     editText = (EditText) findViewById(R.id.name); 
     editText2 = (EditText) findViewById(R.id.partNumber); 
     button = (Button) findViewById(R.id.send); 
    } 

    public void Send(View view) { 
     this.view = view; 
     new Create_Part().execute(); 
    } 

    class Create_Part extends AsyncTask<String, String, String> { 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      pDialog = new ProgressDialog(MainActivity.this); 
      pDialog.setMessage("Sending part to the database..."); 
      pDialog.setIndeterminate(false); 
      pDialog.setCancelable(true); 
      pDialog.show(); 
     } 

     @SuppressWarnings("WrongThread") 
     @Override 
     protected String doInBackground(String... args) { 
      String String_name = editText.getText().toString(); 
      String Int_Part = editText2.getText().toString(); 

      List<NameValuePair> params = new ArrayList<>(); 
      params.add(new BasicNameValuePair("Name", String_name)); 
      params.add(new BasicNameValuePair("part_nr", Int_Part)); 

      JSONObject json = jsonParser.makeHttpRequest("http://192.168.2.1/db_create.php", "POST", params); 

      try { 
       int success = json.getInt("success"); 

       if (success == 1) { 
        finish(); 
       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

      return null; 
     } 

     protected void onPostExecute(String file_url) { 
      pDialog.dismiss(); 
     } 
    } 
} 

マイactivity_main.xmlファイル:

button.setOnClickListener(this); 

は、その後、あなたの活動にView.OnClickListenerを実装する:あなたは、ボタンのクリックリスナを登録する必要があり

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.example.dipankarroy.rpitoandroidmessengerapp.MainActivity" 
    android:onClick="Send" 
    android:nestedScrollingEnabled="false"> 

    <EditText 
     android:id="@+id/name" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentEnd="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentStart="true" 
     android:layout_alignParentTop="true" 
     android:hint="@string/name" /> 

    <EditText 
     android:id="@+id/partNumber" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignEnd="@+id/name" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:layout_alignRight="@+id/name" 
     android:layout_below="@+id/name" 
     android:hint="@string/part_number" /> 

    <Button 
     android:id="@+id/send" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/partNumber" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="36dp" 
     android:text="@string/send" 
     android:onClick="Send" /> 
</RelativeLayout> 
+0

最初にプライベートビューを削除する。この行 – Pavya

+0

ボタンの 'onClickListener'はどこにありますか? –

+0

onclickプロパティマップのSendメソッドを想定します。 activity_mainレイアウトを共有する – alrama

答えて

0

public class MainActivity extends AppCompatActivity implements View.OnClickListener { 
    @Override public void onClick(View v) { 
    new Create_Part().execute(); 
    } 
} 
+0

これは、メソッドの呼び出しによってjava.lang.NullPointerExceptionが生成されることを示しています – Vibhor

-1

あなたはこれを好きなことができます -

button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) {    

       new Create_Part().execute();     

      } 
     } 
    }); 

は、それはあなたを助けることを願っています。

0

ルートRelativeLayoutからandroid:onClick="Send"を削除してください。あなたのボタン以外の場所をクリックすると、自分のルートレイアウトをクリックしていて、あなたのアクティビティでSend(View view)メソッドを呼び出しています。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context="com.example.dipankarroy.rpitoandroidmessengerapp.MainActivity" 
android:nestedScrollingEnabled="false">