Как получить возвращаемое значение из onResponse? - PullRequest
0 голосов
/ 28 октября 2018

Я пытался выяснить, могу ли я заставить onResponse возвращать значение, чтобы я мог использовать его в качестве метода и, следовательно, использовать его несколько раз в своей основной деятельности, но я не могу заставить свой onResponse возвращать значение, и я не понимаюКонцепция «Обратные вызовы», как я видел, люди используют для решения подобных проблем ... Я думаю, это просто потому, что я новичок в Java и все еще учусь - может кто-нибудь мне помочь?

Спасибо

Класс: Util.java

package com.example.mkm.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class Util extends AppCompatActivity

{
    /**private String OK;*/
    protected void onCreate (Bundle savedInstanceState){
    super.onCreate(savedInstanceState);

    OkHttpClient client = new OkHttpClient();

    String url = "http://192.168.43.33/onled";

    Request request = new Request.Builder()
            .url(url)
            .build();

    client.newCall(request).enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {
            e.printStackTrace();
        }


        public void onResponse(Call call, Response response) throws IOException {
            if (response.isSuccessful()) {
                /** How do i return the result?*/ 
               /** OK = response.body().string();*/
                }


        }});
}


}

А потом из моего основного потока

package com.example.mkm.myapplication;

import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.ToggleButton;

public class MainActivity extends AppCompatActivity {

private TextView mTextViewResult;
private ToggleButton but1;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mTextViewResult = findViewById(R.id.text_view_result);
}

public void toggleClick(View view) {
    but1 = findViewById(R.id.colorChange);
    boolean on = ((ToggleButton) view).isChecked();
    /**Here i'd like to call the class' method to see if the HTTP request succesfully interacted and then use the return value to turn on my button*/
    if (on) {
        but1.setBackgroundColor(Color.GREEN);

    }
    else {
        but1.setBackgroundColor(Color.GRAY);
    }
}
}

1 Ответ

0 голосов
/ 29 октября 2018

Оказывается, я был просто nuub, как и ожидалось!

Кажется, все, чего мне не хватало, - это объявить класс и сделать его в моей функции mainActivity с

enter code here

toggleGPIO turnOn = new toggleGPIO();

Так что мой кодтеперь изменился на;

MainActivity;

package com.example.mkm.myapplication;

import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.ToggleButton;

public class MainActivity extends AppCompatActivity {

private TextView mTextViewResult;
private ToggleButton but1;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mTextViewResult = findViewById(R.id.text_view_result);
}

public void toggleClick(View view) {
    but1 = findViewById(R.id.colorChange);
    boolean on = ((ToggleButton) view).isChecked();
    toggleGPIO turnOn = new toggleGPIO();
    if (on) {
        turnOn.toggleGPIO("onled");
        but1.setBackgroundColor(Color.GREEN);
    }
    else{
        turnOn.toggleGPIO("offled");
            but1.setBackgroundColor(Color.GRAY);
        }
    }
}

И затем метод;

package com.example.mkm.myapplication;
import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

class toggleGPIO {

String toggleGPIO(String http) {

    OkHttpClient client = new OkHttpClient();
    final  String myString = "true";
    String url = "http://192.168.43.33/"+http;

    Request request = new Request.Builder()
            .url(url)
            .build();

    client.newCall(request).enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {
            e.printStackTrace();
        }

        public void onResponse(Call call , Response response){
            if (response.isSuccessful()) {
/** 
        Only problem is i dont actually get a return result from this here because i still dont know how to use "Callbacks"
return myString;
*/
                               }
            }

    });
    return myString;
}

}

Но я все же хотел бы знать, как я мог бы использовать Calback вмоя функциональность, если у кого-то есть подсказка.

...