确定。现在我将该翻译类移到单独的地方Translation.java。 但我还是不能用它:
Translation translation = new Translation();
translation.Translate("sadfas",);//this not work??
类和方法是公开的。为什么我不能使用???
我是Java和Android的新手。 我有一个OcrCaptureActity。在那个活动里面,我有一个这样的课:
public class Translation {
public String mytext;
public String translate (String str) {
RequestQueue queue = Volley.newRequestQueue( getApplicationContext());
String url ="someurl";
// Request a string response from the provided URL.
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
// Display the first 500 characters of the response string.
//mTextView.setText("Response is: "+ response.substring(0,500));
mytext = response;
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//mTextView.setText("That didn't work!");
}
});
// Add the request to the RequestQueue.
queue.add(stringRequest);
return mytext;
}
}
在我的OcrGraphic课程中,我有这样的用法:
OcrCaptureActivity.Translation translation = new OcrCaptureActivity().new Translation();
translation.translate("dfas"); //that translate method not work. It s red.
知道问题是什么。 我只有一个理由在活动中使用Translate类,该行仅适用于活动。
RequestQueue queue = Volley.newRequestQueue( getApplicationContext());//this only works inside activity
否则我不能在普通班级中使用这样的东西:
RequestQueue queue = Volley.newRequestQueue( this);//it gives error
所以,如果你能帮我解决翻译对象的翻译方法,或者如何在活动以外的某些类中初始化RequestQueue 这对我来说非常有帮助。
答案 0 :(得分:-1)
我试图移动我将在课堂上使用的翻译方法。 但我只需要知道这条线路如何工作? Volley.newRequestQueue(this);
这行代码假定调用是从活动内部进行的。在这种情况下,活动由this
引用,Volley.newRequestQueue()
作为参数传递给this
。
如果该行仅被复制并粘贴到其他非活动或上下文的类中,则它将无效,因为this
将不会引用活动。
这种情况的解决方案是获取对正在运行的活动的引用,并将其作为参数而不是translation.translate("dfas", activity);
传递。
要将Translation类放在Activity类之外,可以在方法中添加Context参数,并在使用时将活动与字符串一起传递。
您可以调用this
,其中activity是运行翻译的活动(来自您将传递给它的活动本身public class MainActivity extends AppCompatActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AnotherClass anotherClass = new AnotherClass(this); //this is the activity
anotherClass.runMeToTranslate("The text to be translated");
}
}
)。
<强> MainActivity.java 强>
/* Here we use the translation class */
public class AnotherClass{
Context context;
public AnotherClass(Context ctx){
this.context = ctx;
}
public runMeToTranslate(String text){
Translation translation = new Translation();
translation.translate(text,context);
}
}
<强> AnotherClass.java 强>
public class Translation {
public String mytext;
public String translate (String str, final Context ctx){
RequestQueue queue = Volley.newRequestQueue( ctx.getApplicationContext());
String url ="someurl";
// Request a string response from the provided URL.
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
// Display the first 500 characters of the response string.
//mTextView.setText("Response is: "+ response.substring(0,500));
mytext = response;
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//mTextView.setText("That didn't work!");
}
});
// Add the request to the RequestQueue.
queue.add(stringRequest);
return mytext;
}
}
<强> Translation.java 强>
from http.server import HTTPServer, BaseHTTPRequestHandler
class xxx(BaseHTTPRequestHandler):
def do_GET(self):
self.path = "/index.php"
try:
file_to_open = open(self.path).read()
self.send_response(200)
except:
file_to_open = "File cannout found!"
self.send_response(404)
self.end_headers()
self.wfile.write(bytes(file_to_open, "utf-8"))
httpd = HTTPServer(("localhost", 8080), xxx)
httpd.serve_forever()