2015-08-21 3 views
0

Я звоню (getData() , который должен запустить HttpURLConnection и возвращает строку (позже с приведением в качестве Long), то строка должна быть одна строки из этого URL: https://blockchain.info/tobtc?currency=USD&value=1HttpURLConnection пустые, когда называется

Попытки увидеть если он что-то возвращает, я показываю возвращенную строку в файле layout.xml и покажу тост. Но оба оба показывают как пусто

Пожалуйста, не обращайте внимания на то, что я делаю это в основном потоке, я просто пытаюсь заставить его работать в первую очередь.

Что я делаю неправильно? почему он не возвращает строковое значение.

благодаря

package app.com.cryptosudan.android.cryptosudan; 
    import android.app.Activity; 
    import android.content.Intent; 
    import android.os.Bundle; 
    import android.view.Menu; 
    import android.view.MenuItem; 
    import android.view.View; 
    import android.widget.ImageButton; 
    import android.widget.TextView; 
    import android.widget.Toast; 

    import java.io.BufferedReader; 
    import java.io.IOException; 
    import java.io.InputStreamReader; 
    import java.net.HttpURLConnection; 
    import java.net.URL; 

    public class MainActivity extends Activity { 


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

    ImageButton sdg = (ImageButton) findViewById(R.id.imagesdg); 
    ImageButton btc = (ImageButton) findViewById(R.id.imagebtc); 

    final TextView display = (TextView) findViewById(R.id.display); 
    String price; 
    price = (getData()); 
    display.setText(price); 
    Toast.makeText(this, price, Toast.LENGTH_LONG).show(); 


    sdg.setOnClickListener(sdgpage); 
    btc.setOnClickListener(btcpage); 

} 
//to create an instance of button OnClickListener 
View.OnClickListener sdgpage = new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     startActivity(new Intent(MainActivity.this, CalculateSdg.class)); 
    } 
}; 

//to create an instance of button OnClickListener 
View.OnClickListener btcpage = new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     startActivity(new Intent(MainActivity.this, CalculateBtc.class)); 
    } 
}; 




public static String getData() { 
    BufferedReader reader = null; 

    try { 
     URL url = new URL("https://blockchain.info/tobtc?currency=USD&value=1"); 
     HttpURLConnection con = (HttpURLConnection) url.openConnection(); 

     StringBuilder sb = new StringBuilder(); 
     reader = new BufferedReader(new InputStreamReader(con.getInputStream())); 

     String line; 
     while((line = reader.readLine()) !=null) { 
      sb.append (line + "/n"); 

     } return sb.toString(); 

    }catch (Exception e){ 
     e.printStackTrace(); 
     return null; 
    }finally { 
     if (reader != null) { 
      try { 
       reader.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
       return null; 
      } 
     } 
    } 


} 






@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

    } 

+0

Возможно, сервер возвращает ошибку. Вы должны проверить код ответа. Если ошибка, вызовите getErrorStream вместо getInputStream. Кроме того, попробуйте позвонить con.connect() – BNK

+0

Еще одна вещь, используйте HttpsUrlConnection, поскольку сервер Url - https. Вы должны опубликовать свой логарифм, если он доступен. – BNK

+0

Отличные очки, спасибо, пропустил часть Https – ninjayoto

ответ

1

Для запроса HTTP на главном изменении потока вы OnCreate метод с StrictMode.ThreadPolicy.Builder(). PermitAll()

Я не рекомендую Http запрос в главном потоке !!!!

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

ImageButton sdg = (ImageButton) findViewById(R.id.imagesdg); 
ImageButton btc = (ImageButton) findViewById(R.id.imagebtc); 

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
StrictMode.setThreadPolicy(policy); 

final TextView display = (TextView) findViewById(R.id.display); 
String price; 
price = (getData()); 
display.setText(price); 
Toast.makeText(this, price, Toast.LENGTH_LONG).show(); 


sdg.setOnClickListener(sdgpage); 
btc.setOnClickListener(btcpage); 

} 
+0

проверен и работает, спасибо, конечно, переместит все на заднюю нить, как только все будет работать – ninjayoto

Смежные вопросы