2017-02-06 11 views
0

私はネイティブのアンドロイド開発で初心者です。私はandroid studioに取り組んでいます。私は今私が欲しいyiiを使用してweb service apiを作成し、また私がUsersActivityという名前mysqlで2つのテーブルを作成している、enter image description hereアンドロイドスタジオのREST APIを使用してユーザーIDに基づいてユーザー名を取得します。

以下

ようUserテーブルにいくつかのデータを入力したユーザーはのidに入る時はいつでもあります特定のユーザーusernameが表示されます。このため

私はこのスタックlinkに続き、私はテキストに名前を表示するレイアウト

<EditText 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:inputType="textPersonName|number" 
    android:ems="10" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:id="@+id/etId" 
    style="@style/Widget.AppCompat.EditText" /> 

<Button 
    android:text="Submit" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentEnd="true" 
    android:id="@+id/btn_Submit" 
    android:layout_alignBottom="@+id/etId" /> 

<TextView 
    android:text="TextView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="53dp" 
    android:id="@+id/textView" 
    android:textAppearance="@style/TextAppearance.AppCompat.Display1" 
    android:layout_below="@+id/etId" 
    android:layout_centerHorizontal="true" /> 

を作りました。

リンクごとに私はそれに従いましたが、私の必要な結果を見ることができませんでした。

public class MainActivity extends AppCompatActivity { 

String URL = "http://localhost:8000/app/web/users/"; 
String result = ""; 

TextView tv; パブリックstatic final String LOG_TAG = MainActivity.class.getSimpleName();以下は、アップデート1

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


    final EditText editText = (EditText)findViewById(R.id.etId); 

    /*editText.setOnClickListener(new EditText.OnClickListener(){ 

     @Override 
     public void onClick(View v) { 
      editText.setText(" "); 
     } 
    }); 
    */ 
    final Button button = (Button)findViewById(R.id.btn_Submit); 

    button.setOnClickListener(new Button.OnClickListener(){ 

     @Override 
     public void onClick(View v) { 
      String query = editText.getText().toString(); 
      callWebService(query); 
     } 
    }); 

} 

private void callWebService(String q) { 

    HttpClient httpclient = new DefaultHttpClient(); 

    HttpGet request = new HttpGet(URL + q); 

    ResponseHandler<String> handler = new BasicResponseHandler(); 

    try 
    { 
     result = httpclient.execute(request, handler); 
    } catch (ClientProtocolException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    httpclient.getConnectionManager().shutdown(); 
    tv = (TextView)findViewById(R.id.textView); 

    Toast.makeText(LOG_TAG, "Hi", result).show(); 
    //tv.append("Hi ", result, ":"); 
} 

は私がボタン

android.os.NetworkOnMainThreadException 
                       at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1147) 
                       at java.net.InetAddress.lookupHostByName(InetAddress.java:418) 
                       at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252) 
                       at java.net.InetAddress.getAllByName(InetAddress.java:215) 
                       at com.android.okhttp.HostResolver$1.getAllByName(HostResolver.java:29) 
                       at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:232) 
                       at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:124) 
                       at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:272) 
                       at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:211) 
                       at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:382) 
                       at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:332) 
                       at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:500) 
                       at com.example.accurat.webservice.MainActivity$1.onClick(MainActivity.java:53) 
                       at android.view.View.performClick(View.java:4780) 
                       at android.view.View$PerformClick.run(View.java:19866) 
                       at android.os.Handler.handleCallback(Handler.java:739) 
                       at android.os.Handler.dispatchMessage(Handler.java:95) 
                       at android.os.Looper.loop(Looper.java:135) 
                       at android.app.ActivityThread.main(ActivityThread.java:5254) 
                       at java.lang.reflect.Method.invoke(Native Method) 
                       at java.lang.reflect.Method.invoke(Method.java:372) 
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 

をタップしたときに私が得るエラーであり、それはポイント

`button.setOnClickListener(新しいボタンでいます.OnClickListener(){

 @Override 
     public void onClick(View v) { 
      String query = editText.getText().toString(); 
      callWebService(query); 
     } 
    });` 
私が行っているこのlinkに従うことにより

アップデート2

if (android.os.Build.VERSION.SDK_INT > 9) 
    { 
     StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
     StrictMode.setThreadPolicy(policy); 
    } 

が今私のアプリがクラッシュしませんが、それはちょうど私HIはなく、要求されたデータ

ながらを表示それをデバッグする私は例外がある org.apache.http.conn.HttpHostConnectException: Connection to http://localhost:8000 refused

NOTE

enter image description here

下の画像に表示のように私は私のブラウザ上でそれを要求したとき、それは私に必要な結果を示していますが:私はエミュレータ上でそれをテストしてい

ご協力いただければ幸いです。

+1

あなたはどんなエラーを受けていますか? –

+0

yiiベースのAPIは期待通りに機能しますか? – Shadow

+0

@ M.WaqasPervezは私の 'update 1'を見てください – faisal1208

答えて

関連する問題