2017-04-12 3 views
0

私はPhillips Hue Lights用のアプリケーションを作成しています。私は自分のアプリケーションから色相橋の特定のURLへの投稿要求を行うボタンをクリックしたいと思っています。返されたユーザー名を取得します。ボタンをクリックして投稿要求をアンドロイドスタジオ

マイコード:私もPostHandlerクラス作成した

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import org.json.JSONObject; 

import java.util.HashMap; 
import java.util.concurrent.ExecutionException; 

public class Device extends AppCompatActivity { 

HashMap<String, String> params = new HashMap<>(); 

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

     params.put("devicetype", "final_year_project#michelle"); 

     PostHandler handler = new PostHandler(params); 
     try { 
      JSONObject response = handler.execute("http://192.168.1.85/api/").get(); 

      Log.d("TEST_RESPONSE", response.toString()); 

     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } catch (ExecutionException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
} 

import android.os.AsyncTask; 
import org.json.JSONObject; 
import java.util.HashMap; 
import java.util.Map; 
import java.util.concurrent.TimeUnit; 
import okhttp3.FormBody; 
import okhttp3.OkHttpClient; 
import okhttp3.Request; 
import okhttp3.RequestBody; 
import okhttp3.Response; 

public class PostHandler extends AsyncTask<String, Void, JSONObject> { 

OkHttpClient client = new OkHttpClient(); 
HashMap<String, String> params = new HashMap<>(); 

public PostHandler(HashMap params) { 
    this.params = params; 
} 

public PostHandler() { 

} 

@Override 
protected JSONObject doInBackground(String... url) { 

    client = new OkHttpClient.Builder() 
      .connectTimeout(5, TimeUnit.MINUTES) 
      .writeTimeout(5, TimeUnit.MINUTES) 
      .readTimeout(5, TimeUnit.MINUTES) 
      .build(); 

    FormBody.Builder body = new FormBody.Builder(); 

    for (Map.Entry<String, String> entry : params.entrySet()) { 
     body.add(entry.getKey(), entry.getValue()); 
    } 

    RequestBody formBody = body.build(); 

    Request request = new Request.Builder() 
      .url(url[0]) 
      .post(formBody) 
      .build(); 

    try{ 
     Response response = client.newCall(request).execute(); 
     String result = response.body().string(); 
     JSONObject json = new JSONObject(result); 
     return json; 
    }catch (Exception e){ 
     e.printStackTrace(); 
    } 

    return null; 
} 

}

私は "シンボルのparamsを解決することはできません" というエラーを取得していますが、ポストの要求はありませんうまくいかない。

誰かが間違っていると知っていますか?私はAPIの作業には新しいです。あなたはどこでもあなたのコード内の変数paramsを宣言していない

ContentValues params = new ContentValues(); 

+0

あなたのコードで変数 'params'の宣言はどこにありますか? –

+0

あなたはparamsを宣言したり初期化したりしなかったし、PostHandlerクラスも表示する必要があります。 – greenteafox

+0

あなたはこの情報でクラスの完全なコードを共有できますか?なぜそのエラーが発生しているのか明確ではありません。 –

答えて

0

setContentView(R.layout.activity_device);後に以下の行を追加します。

+0

私が作成したPostHandlerクラスで質問を更新し、変数paramsを宣言しました。アプリはちょうどクラッシュし、URLへの投稿リクエストを行いません(色相ブリッジ) –

+0

そのクラッシュログを投稿してください。 –

関連する問題