2017-01-03 15 views
0

私は、Google Cloudのバックエンドからデータを受け取り、チュートリアルHello Endpointsから始まるエンドポイントとして返すコードを作成しようとしています。 https://cloud.google.com/appengine/docs/java/endpoints/helloendpoints-android-studioonPostExecuteからテキストビューを更新する

私はトーストの代わりにテキストビューとして結果を取得しようとしています。試しました

package com.example.username.textviews; 

import android.content.Context; 
import android.os.AsyncTask; 
import android.support.v4.util.Pair; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.example.neil.myapplication.backend.myApi.MyApi; 
import com.google.api.client.extensions.android.http.AndroidHttp; 
import com.google.api.client.extensions.android.json.AndroidJsonFactory; 
import com.google.api.client.googleapis.services.AbstractGoogleClientRequest; 
import com.google.api.client.googleapis.services.GoogleClientRequestInitializer; 

import java.io.IOException; 

public class MainActivity extends AppCompatActivity { 
    private TextView t; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     t = (TextView) findViewById(R.id.response); 
     new EndpointsAsyncTask().execute(new Pair<Context, String>(this, "Manfred")); 
    } 
} 

class EndpointsAsyncTask extends AsyncTask<Pair<Context, String>, Void, String> { 
    private static MyApi myApiService = null; 
    private Context context; 

    @Override 
    protected String doInBackground(Pair<Context, String>... params) { 
     if(myApiService == null) { // Only do this once 
      MyApi.Builder builder = new MyApi.Builder(AndroidHttp.newCompatibleTransport(), 
        new AndroidJsonFactory(), null) 
        // options for running against local devappserver 
        // - 10.0.2.2 is localhost's IP address in Android emulator 
        // - turn off compression when running against local devappserver 
        .setRootUrl("http://10.0.2.2:8080/_ah/api/") 
        .setGoogleClientRequestInitializer(new GoogleClientRequestInitializer() { 
         @Override 
         public void initialize(AbstractGoogleClientRequest<?> abstractGoogleClientRequest) throws IOException { 
          abstractGoogleClientRequest.setDisableGZipContent(true); 
         } 
        }); 
      // end options for devappserver 

      myApiService = builder.build(); 
     } 

     context = params[0].first; 
     String name = params[0].second; 

     try { 
      return myApiService.sayHi(name).execute().getData(); 
     } catch (IOException e) { 
      return e.getMessage(); 
     } 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     //Toast.makeText(context, result, Toast.LENGTH_LONG).show(); 
     t.setText(result); 
    } 
} 

activity_main.xmlに@ + id/responseに必要な行を追加し、strings.xmlに応答しました。

これは、onPostExecute()内からtを認識することも、findViewByIdをまったく使用することもできません。

私はこれをsussedしたとき、私はデータストアから取得する必要があります。フィールド1〜テキストフィールド1など

答えて

0

TextViewやその他のウィジェットを再表示させるようなことをするときは、UIスレッドを使用する必要があります。私は個人的にonPostExecute()を使用していませんが、他の同様のAPIを使用しています。ここで

はそれを行うための一つの方法です:

t.post (new Runnable() 
{ 
    @Override public void run() 
    { 
    t.setText (result); 
    } 
}); 
関連する問題