ठीक है इसलिए मुझे थोड़ा सा पृष्ठभूमि देने की आवश्यकता है। सबसे पहले मैं फोनगैप 1.7 के साथ jquery-mobile का उपयोग कर रहा हूं। मैंने एक बहुत ही सरल जावा सर्वर कोड किया है जो सर्वर सॉकेट ऑब्जेक्ट का उपयोग करता है। एंड्रॉइड फोन पर, मैं सर्वर से कनेक्ट करता हूं, और ऐसा करने पर सर्वर सॉकेट पर डेटा भेजता है। यह हिस्सा काम कर रहा है।एंड्रॉइड फोनगैप 1.7 जावास्क्रिप्ट फ़ंक्शन को कॉल करना
जिस हिस्से में मैं फंस गया हूं वह यह है कि मैं उस सॉकेट पर डेटा भेजने का इरादा रखता हूं जिसके लिए jquery मोबाइल UI को डेटा के स्वागत पर अपडेट किया जाना आवश्यक है।
उत्तर: साइमन एक बड़े पैमाने पर मदद की थी और मैं यह पता लगा उसकी मदद और this tutorial
बात यह है कि वास्तव में मारा मुझे धागा PhoneGap प्लगइन अपने आप में पैदा हो रही थी भी थे। एक बार मुझे एहसास हुआ कि, सब कुछ जगह में गिर गया। हालांकि, यहां रुचि रखने वाले किसी भी व्यक्ति के लिए कोड है। ध्यान रखें, मैंने ट्यूटोरियल से बहुत कुछ लिया। मैंने इन अवधारणाओं का परीक्षण करने के लिए बनाए गए बहुत ही सरल जावा सर्वर को भी शामिल किया है। मैंने सोचा कि शायद यह भविष्य में किसी की मदद करेगा। बस याद रखें, यह मूल रूप से अवधारणा का सबूत है।
मैं अपने वास्तविक आवश्यकताओं के अनुरूप इस प्लगइन सुधार की जरूरत है:
एंड्रॉयड गतिविधि: आयात org.apache.cordova.DroidGap;
import android.os.Bundle;
public class ISSAndroidActivity extends DroidGap {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.loadUrl("file:///android_asset/www/index.html");
}
}
PhoneGap प्लगइन:
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;
import java.net.SocketException;
import org.apache.cordova.api.*;
import org.apache.cordova.api.PluginResult;
import org.apache.cordova.api.PluginResult.Status;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.util.Log;
public class InvokeJavaScriptPlugin extends Plugin {
public static String PLUGIN_TAG = "InvokeJavaScriptPlugin";
public static String PROCESS_DATA_ACTION = "processData";
private String callBackId = "";
@Override
public PluginResult execute(String action, JSONArray args, String callbackId) {
PluginResult pluginResult = null;
Log.d(PLUGIN_TAG, "Invoking Javascript w\\ NO_RESULT");
if (action.equals(PROCESS_DATA_ACTION)) {
this.callBackId = callbackId;
startProcessingData();
pluginResult = new PluginResult(Status.NO_RESULT);
pluginResult.setKeepCallback(true);
} else {
pluginResult = new PluginResult(Status.INVALID_ACTION);
Log.e(PLUGIN_TAG, "Invalid action : " + action);
}
return pluginResult;
}
/**
* Spawns a thread that connects to a server, and receives data from it
*/
private void startProcessingData() {
new Thread() {
@Override
public void run() {
// Socket Testing
ObjectOutputStream out;
ObjectInputStream in;
Socket requestSocket = new Socket();
Object inboundObject;
SocketAddress ipAddr = new InetSocketAddress("192.168.1.2",
2012);
try {
requestSocket.connect(ipAddr);
out = new ObjectOutputStream(
requestSocket.getOutputStream());
out.flush();
in = new ObjectInputStream(requestSocket.getInputStream());
do {
inboundObject = in.readObject(); // Data is received
// here
int processedData = ((Number) inboundObject).intValue();
onProcessDataReadSuccess(processedData);
} while (requestSocket.isConnected());
} catch (SocketException ex) {
Log.d(PLUGIN_TAG, "Connection to Server lost");
} catch (Exception ex) {
ex.printStackTrace();
}
}
}.start();
}
/**
* Callback method for startProcessingData(). Sends the result up to
* javascript layer via Plugin.success()<br>
* This method is automatically called asynchronously when processing is
* finished.
*
* @param processedData
* the result of data processing which will be passed back to
* javascript.
*/
private void onProcessDataReadSuccess(int processedData) {
Log.d(PLUGIN_TAG, "Processing data: " + processedData);
PluginResult result;
try {
JSONObject resultJSON = new JSONObject();
resultJSON.put("processedData", processedData);
result = new PluginResult(Status.OK, resultJSON);
} catch (JSONException jsonEx) {
Log.e(PLUGIN_TAG, "Got JSON Exception " + jsonEx.getMessage());
jsonEx.printStackTrace();
result = new PluginResult(Status.JSON_EXCEPTION);
}
result.setKeepCallback(true);
this.success(result, this.callBackId);
}
}
index.html:
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
<link type="text/css" href="css/jquery.mobile-1.1.0.min.css"
rel="stylesheet" />
</head>
<script type="text/javascript" charset="utf-8"
src="scripts/cordova-1.7.0.js"></script>
<script type="text/javascript" src="scripts/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="scripts/jquery.mobile-1.1.0.min.js"></script>
<script type="text/javascript" src="scripts/InvokeJavaScript.js"></script>
<script type="text/javascript" charset="utf-8">
document.addEventListener('deviceready', function() {
window.plugins.InvokeJavaScript.processData(function(result) {
displayProcessedData(result)
}, function(error) {
console.log(error)
});
}, true);
function displayProcessedData(result) {
document.getElementById("processedData").innerHTML = result.processedData;
}
</script>
<body>
<div data-role="page">
<div data-role="header" data-position="fixed">
<h1>Demo</h1>
</div>
<div data-role="content">
Result:
<div id="processedData"></div>
</div>
<div data-role="footer" data-position="fixed">
<div data-role="navbar"></div>
</div>
</div>
</body>
</html>
Server.java
import java.io.BufferedReader;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class ISSServer {
private static Socket androidSocket;
private static ServerSocket serverSocket;
static ObjectOutputStream out;
static BufferedReader in;
public static void main(String[] args) {
System.out.println("Listen Thread: Waiting for connection");
int port_number = 2012; // The default port
try {
serverSocket = new ServerSocket(port_number);
androidSocket = serverSocket.accept();
System.out.println("Connection established");
out = new ObjectOutputStream(androidSocket.getOutputStream());
out.flush();
// in = new BufferedReader(new
// InputStreamReader(androidSocket.getInputStream()));
out.writeObject(1337);
out.flush();
out.reset();
System.out.println("1337 sent");
Thread.sleep(2000);
out.writeObject(9999);
out.flush();
out.reset();
System.out.println("9999 sent");
Thread.sleep(2000);
out.writeObject(1234);
out.flush();
out.reset();
System.out.println("1234 sent");
Thread.sleep(2000);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
कृपया इसे देखें। http://stackoverflow.com/questions/7947559/calling-javascript-from-eclipse-for-phonegap –