Home php c# sql c c++ javascript python java go android git linux asp.net django .net node.js ios xcode cocoa iphone mysql tomcat mongodb bash objective-c scala visual-studio apache elasticsearch jar eclipse jquery ruby-on-rails ruby rubygems android-studio spring lua sqlite emacs ubuntu perl docker swift amazon-web-services svn html ajax xml java-ee maven intellij-idea rvm macos unix css ipad postgresql css3 json windows-server vue.js typescript oracle hibernate internet-explorer github tensorflow laravel symfony redis html5 google-app-engine nginx firefox sqlalchemy lucene erlang flask vim solr webview facebook zend-framework virtualenv nosql ide twitter safari flutter bundle phonegap centos Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 39

0
votes
answers
11 views
+10

如何實現字段和象他們一樣解決國際象棋

-1

我想實現一個叫做Pah Tum的遊戲。 (它是如何工作的我的問題,這是不相關的。)我想在這樣一個控制檯創建一個字段:如何實現字段和象他們一樣解決國際象棋

A B C D 
1 [] [] [] [] 
2 [] [] [] [] 
3 [] [] [] [] 
4 [] [] [] [] 

我已經想通了如何打印但是: 我要定義一個函數中我可以解決特定領域和阻止他們,就像這樣:B3

A B C D 
1 [] [] [] [] 
2 [] [] [] [] 
3 [] [X][] [] 
4 [] [] [] [] 

不知怎的,我無法弄清楚如何做到這一點,而無需使用百行代碼,我打印一步一步的。

+0

你有沒有考慮嵌套列表,其中每個列表repersents行? – timgeb

+0

使用'2d'列表以及_block_field_是什麼意思? – Arman

+0

SO不像隨便的電子郵件或短信。試着正確使用資本我和收縮。 –

沙发
0
2

您可以創建一個類,並使用__setitem__

import string 
class Board: 
    def __init__(self, width): 
     self.w = width 
     self.board = [[[] for i in range(width)] for b in range(width)] 
    def __setitem__(self, coords, val): 
     self.board[coords[0]][coords[-1]] = [val] 
    def __repr__(self): 
     return ' '+' '.join(list(string.ascii_lowercase[:self.w]))+"
"+'
'.join(string.ascii_lowercase[a]+' '.join(str(i) for i in b) for a, b in enumerate(self.board)) 

board = Board(4) 
board[(2, 2)] = 'X' 
print(board) 

輸出:

a b c d 
a[] [] [] [] 
b[] [] [] [] 
c[] [] ['X'] [] 
d[] [] [] [] 
0
votes
answers
11 views
+10

使用Google Apps腳本進行條紋付款

0

試圖使用this示例代碼在Google Apps腳本中創建條紋結帳和付款。使用Google Apps腳本進行條紋付款

中將Html.HTML文件

<!DOCTYPE html> 
 
<!-- modification of https://stripe.com/docs/checkout#integration-custom --> 
 
<button id="customButton">Purchase</button> 
 

 
<script src="https://checkout.stripe.com/checkout.js"></script> 
 
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 

 
<script> 
 
var handler = StripeCheckout.configure(
 
{ 
 
    key: 'pk_test_UUbDY16wDCECOujIs0vQ2vTi', 
 
    image: 'https://i.imgur.com/M0ku9HH.png', 
 
    token: function(token) 
 
    { 
 
    // Use the token to create the charge with a server-side script. 
 
    // You can access the token ID with `token.id` 
 
    google.script.run.withSuccessHandler(chargeSuccess) 
 
    google.script.run.withFailureHandler(chargeFailure) 
 
    google.script.run.processCharge(token); 
 
    } 
 
} 
 
); 
 

 
$('#customButton').on('click', function(e) 
 
{ 
 
    // Open Checkout with further options 
 
    handler.open(
 
    { 
 
    name: 'ASD Anastasiya Ballet S.', 
 
    description: 'Pagamento online' 
 
    }); 
 
    e.preventDefault(); 
 
}); 
 
function chargeSuccess(result) { 
 
    // handle response code client side 
 
} 
 
function chargeFailure(error) { 
 
    // client error handling 
 
} 
 
</script>

這裏GS.gs文件

// IFRAME mode required 
function doGet() { 
return HtmlService.createHtmlOutputFromFile('HTML') 
.setSandboxMode(HtmlService.SandboxMode.IFRAME); 
} 

/** 
* Read Stripe token passed from google.script.run instead of 
* using a form POST request - which can't happen in HtmlService. 
* 
* @param {Object} token from checkout.js 
* @return {number} HTTP Response code 
*/ 
function processCharge(token) { 


var tokenId = token.id; 
var stripeEmail = token.email; 

// Create a Customer (optional) 
/* 
var path = "/customers"; 
var customer = Stripe_PostRequest(path, [], [], { 
    "description": "test customer", 
    "source": tokenId, 
    "email": stripeEmail 
}); 

var custId = JSON.parse(customer.getContentText()).id; 
*/ 

// Create a Charge 
path = "/charges"; 
var charge = Stripe_PostRequest(path, [], [], { 
    "currency": "usd", 
    "amount": "500", 
    //"customer": custId 
}); 

return charge.getResponseCode(); 
} 

/** 
* Generic function for making a POST request to the Stripe API. 
* Provided by Stripe support 
* 
* @param {string} path 
* @param {Object} parameters 
* @return {HTTPResponse} 
*/ 
var Stripe_PostRequest = function(path, fields, expandableFields, parameters) { 
    // Expand related fields when accessing sub-properties 
    // (e.g. `customer.email` should expand the customer 
    // object when retrieving a charge). 
    if (expandableFields !== undefined) { 
    parameters["expand[]"] = []; 
    fields.forEach(function(field) { 
     field = field.split(".")[0]; 
     if (expandableFields.indexOf(field) !== -1) { 
     parameters["expand[]"].push("data." + field); 
     } 
    }); 
    } 

    var scriptProperties = PropertiesService.getScriptProperties(); 
    var secret = scriptProperties.getProperty('testSecret'); 

    var options = { 
    "method" : "post", 
    "headers": { 
     "Authorization": "Bearer " + secret, 
     "User-Agent": "Stripe Example/0.1" 
    } 
    }; 
    var url = "https://api.stripe.com/v1" + path + serializeQueryString(parameters); 
    return UrlFetchApp.fetch(url, options); 
} 

/** 
* Serialize a dictionary to a query string for GET requests 
*/ 
var serializeQueryString = function(parameters) { 
    var str = []; 
    for (var key in parameters) { 
    var value = parameters[key]; 
    if (parameters.hasOwnProperty(key) && value) { 
     if (value.map) { 
     str.push(value.map(function(array_value) { 
      return key + "=" + encodeURIComponent(array_value); 
     }).join("&")); 
     } else { 
     str.push(key + "=" + encodeURIComponent(value)); 
     } 
    } 
    } 
    return '?' + str.join("&"); 
} 

的形式,做工精細,但沒有創建費用,因爲似乎沒有令牌創建。 作爲根本不是一個JS專家,我不知道,如果功能

令牌:功能(令牌)

調用

google.script.run.processCharge(令牌);

正確執行。

+0

首先,你的函數調用看起來不工作的例子,如:google.script.run.withSuccessHandler(chargeSuccess) .withFailureHandler(chargeFailure) .processCharge(令牌); – Kos

+0

是的,我改變了它,假設不清楚。這不是問題,因爲我無法發送正確的密鑰。不確定Google Script POST創建功能是否正常工作。任何使用Google Script創建標準stripe.charges.create調用的方式。 – davide445

沙发
0
0

您的代碼失敗,因爲您已經註釋了custId - 必須提供。這樣做沒有任何壞處,它只會創建一個測試客戶。否則,在「條帶」控制面板中創建一個客戶,並將該ID複製到custId中。

您可以隨時查看「查看>執行記錄」以獲取腳本失敗原因的線索。

0
votes
answers
10 views
+10

Google sheet countif cell not empty and background color not white

1

我有一個在線電子表格,可以跟蹤所有流媒體電視提供商(Sling,DIRECTV NOW,PS Vue,Youtube TV,Philo等)的現場本地頻道)Google sheet countif cell not empty and background color not white

http://streambuzz.net/streaming-tv-local-channels/

我使用下面的公式來包括在總計的計數細胞:

=countif(B5:B199,"<>") 

每個非空單元格將具有表示所述主要網絡附屬的一個標誌(ABC, CBS,FOX,NBC,C W,MyTV,Telemundo)

但是,我需要能夠跟蹤何時激活的電臺突然停止播出,並且只能成爲點播節目(通常是因爲失敗的轉播談判),例如本週發生的Playstation Vue客戶失去了所有Tribune擁有的福克斯電臺(大約十幾個受影響的主要城市)

在這種情況下,我想突出顯示帶有白色背景的單元格,但在其中留下Fox徽標以指示特殊情況。

因此,長問題總之,如何將公式條件附加到計數單元格,只有當它非空且AND具有白色背景時?

沙发
0
1

你可以寫這樣的自定義函數:

function checkw(row1, row2, column) { // input is range of cells like "A1:A25" 
    var counter = 0; 
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); 
    for (var row = row1; row <= row2; row++) { 
     var cellobj = sheet.getRange(row, column); 
     var cellval = cellobj.getValue(); 
     var currentColor = cellobj.getBackground(); 
     if (currentColor === "#ffffff" && cellval === "") { 
      counter++; 
     } 
     Logger.log(counter); 
    } 
    return counter; 
} 

,並從細胞在電子表格中這樣稱呼它: = checkw(2,22,1)

前有兩個參數是開始和結束行。第三個參數是列。

+0

如果您之前沒有完成Google工作表腳本,LMK和我可以幫助您開始。 – NancySchorr

0
votes
answers
9 views
+10

Celery,Django ..製作任務/線程啓動子任務/線程?

3

我使用Django的芹菜,我試圖得到一個任務,像下面這樣:Celery,Django ..製作任務/線程啓動子任務/線程?

class task1 (Task) 
    def run (self): 
     launch_some_other_task.delay() 

但它似乎並沒有工作,我可以進入更詳細至於我的代碼但我想我會先問問這種事情是否會起作用,因爲這似乎不適合我。我爲我使用硒找到這個必要,一個web測試框架,其中有時會掛在那裏,我不能從中得到任何輸出,所以我希望能夠殺死如果關閉,如果某一條件不符合(在指定的秒數內用特定值更新memcache變量)。

感謝這個

+0

上面的代碼,就可以(在理論上)......究竟會發生什麼? – asksol 2010-10-05 08:48:14

+0

我記不太清楚了,我覺得它只是不啓動這一進程的應該..我的代碼是怎麼樣的混亂和複雜的(因爲它周圍的硒軟件,這是有時那種不可預測的,至少對建我正在使用它)。我要提出一個更簡單的測試,所以我可以張貼在這裏,明天(代碼) – Rick 2010-10-05 09:45:00

+0

對於我來說,這聽起來好像你是黑客硒什麼是不應該做的事:如何進行相關檢測硒代碼生成代碼?如何是不可預知的硒,如果你正確地等待DOM?更多的代碼示例將不勝感激。 – Almad 2010-10-10 00:18:50

沙发
0
0

任何意見,請確保您已經添加了以下到您的urls.py

import djcelery 
djcelery.setup_loader() 
0
votes
answers
9 views
+10

Spark與AVI兼容BigQuery

1

我試圖在Hive中創建一個外部表,並使用存儲在Avro格式的Google存儲中的相同數據在BigQuery中創建另一個表。Spark與AVI兼容BigQuery

我使用的是Dataproc集羣星火2.2.0,星火的Avro 4.0.0和2.1.1蜂房

有Avro的版本/包之間的差異一樣,但如果我創建使用蜂巢表和然後我使用Spark編寫文件,我可以在Hive中看到它們。

但是對於BigQuery是不同的,它能夠讀取Hive Avro文件而不是Spark Avro文件。

錯誤:

The Apache Avro library failed to parse the header with the follwing error: Invalid namespace: .someField 

搜索一些關於錯誤,問題是,星火Avro的文件是從蜂巢/ BigQuery的Avro的文件不同。

我不知道如何解決這個問題,也許在Spark中使用不同的Avro包,但我還沒有找到哪一個與所有系統兼容。

我也想避免棘手的解決方案,如創建蜂巢臨時表和另一個使用insert into ... select * from ...我會寫很多數據的創建,我想避免這種解決方案

任何幫助將是讚賞。謝謝

+0

錯誤是「Invalid namespace:.someField」。 「.someField」是正確的全名嗎? http://avro.apache.org/docs/current/spec.html#names –

+0

這是另一個名字,但它正是其中一個字段的名稱。實際上,是一個Struct的字段數組的名稱。似乎Avro版本之間的架構定義有些不同。 –

沙发
0
1

錯誤消息由BigQuery使用的C++ Avro庫拋出。 Hive可能使用Java Avro庫。 C++庫不喜歡以「。」開頭的命名空間。

這是從庫中的代碼:

if (! ns_.empty() && (ns_[0] == '.' || ns_[ns_.size() - 1] == '.' || std::find_if(ns_.begin(), ns_.end(), invalidChar1) != ns_.end())) { 
    throw Exception("Invalid namespace: " + ns_); 
} 
+0

很高興知道,謝謝。但問題仍然存在,你知道是否有某種方法可以使Spark Avro與BigQuery Avro兼容? –

+0

你可以將命名空間更改爲不以「。」開頭嗎?然後Spark和BigQuery都應該可以讀取它。 –

+0

我想但我不能,我的領域沒有「。」起初,Spark的Avro正在寫這篇文章。「 –

板凳
0
0

想知道如果你找到了答案。

我看到了同樣的事情,我試圖將數據加載到bigquery表中。庫首先將數據以avro格式加載到GCS中。該模式也有一個結構數組,並且命名空間存在一個.

+0

我沒有找到它。目前我正在以JSON格式寫入數據,但我想在某些時候將其更改爲AVRO。 –

0
votes
answers
9 views
+10

谷歌助理改變不工作

2

嗨,大家好,谷歌助理改變不工作

我目前正試圖建立一個應用程序的谷歌助手使用Dialogflow表面。在特定的意圖期間,我想將用戶重定向到他的手機(當使用揚聲器時),因爲意圖需要精確的鍵盤輸入。 正如在文檔中所說,我打電話給我的webhook askForNewSurface()。在操作模擬器,這是顯示出來(截)

"agentToAssistantJson": { 
    "conversationToken": "["_actions_on_google_","some-context"]", 
    "expectUserResponse": true, 
    "expectedInputs": [ 
    { 
     "inputPrompt": { 
     "richInitialPrompt": { 
      "items": [ 
      { 
       "simpleResponse": { 
       "textToSpeech": "PLACEHOLDER_FOR_NEW_SURFACE" 
       } 
      } 
      ] 
     } 
     }, 
     "possibleIntents": [ 
     { 
      "intent": "actions.intent.NEW_SURFACE", 
      "inputValueData": { 
      "@type": "type.googleapis.com/google.actions.v2.NewSurfaceValueSpec", 
      "context": "To show you an image", 
      "notificationTitle": "Check out this image", 
      "capabilities": [ 
       "actions.capability.SCREEN_OUTPUT" 
      ] 
      } 
     } 
     ] 
    } 
    ], 
    "responseMetadata": { 
    "status": {}, 
    "queryMatchInfo": { 
     "queryMatched": true, 
     "intent": "####", 
     "parameterNames": [ 
     "date" 
     ] 
    } 
    }, 
    "expectedInput": { 
    "requestedIntent": { 
     "intent": "####" 
    } 
    } 
} 

}

這根據文檔,似乎有效,不過谷歌剛剛助理回來與「對不起,我沒有得到任何響應'(在模擬器和實際設備上)。

那麼,如何讓助手實際要求用戶更改表面?

這種方法可能根本不支持德語嗎?另外,文檔是關於actions.intent.NEW_SURFACE作爲一個系統的意圖存在有些不一致......

在此先感謝球員,任何提示讚賞:)

編輯:注意到這個問題已經被問here

+0

我也試過,但不適合我 – Sukh

沙发
0
1

好的,我接觸了AoG的支持。原來我們需要一點耐心。

揚嗨,

感謝您在谷歌操作的興趣。 askForNewSurface確實僅適用於英語語言環境。我們正在修改文檔以反映這些限制。 對不起,我感到困惑。 我們沒有在其他語言環境中發佈此功能的任何設置日期。

親切的問候,

讓查爾斯,在谷歌支持小組

操作。

0
votes
answers
9 views
+10

數學運算順序算法

2

我在執行數學運算順序規則的有問題。 我有2個數組。矩陣陣列(最多100個矩陣)和操作陣列(最多99個操作)。這些操作只是矩陣的加法,減法和乘法(用+ - *表示)。數學運算順序算法

我的矩陣是一個結構,但這只是一個細節。我有與他們有關的一切工作職能。

我也有執行操作的功能。

struct Matrix compute(struct Matrix mat1, struct Matrix mat2, char op) 

該函數有一個開關,它決定了操作並執行正確的操作。

我需要改進的是這一塊代碼。

// counter = number of matrices in the array 
// therefore there's also counter-1 operations 

struct Matrix temp = compute(matrices[0], matrices[1], operations[0]); 
for(int j = 1; j < counter; ++j) 
{ 
    temp = compute(temp, matrices[j+1], operations[j]); 
} 
get_matrix(temp); //outputs the matrix to stdout 

目前,這個碼評估矩陣和操作不包括乘法(假定輸入是正確的,操作可以被執行)的正確的所有序列。

我需要什麼?我需要在正確的方向對碰一腳。

+0

你是說你需要一種方法來對操作數是矩陣的表達式執行操作的順序?目前它不能用於乘法,例如如果操作數在數字中,那麼'1 + 2 + 4 * 0'的計算結果爲'0' – Miket25

+0

@ Miket25是的,這正是我所說的。顯然這部分代碼中存在內存泄漏(矩陣是動態分配的),儘管Im在顯示的代碼下只釋放了2行的臨時矩陣。但這是我以後可以解決的問題。 – Welsy

+0

研究大樓**抽象語法樹**。此樹中的節點將是矩陣和操作數。然後您遞歸地蒸發這棵樹,這將實現操作順序。我建議**遞歸下降解析**;這很容易學習。您可以通過遞歸下降解析在網上按照操作計算器的順序進行處理,並將其應用於此問題。 – Miket25

沙发
0
2

一個簡單的方法是遍歷矩陣序列一次,只執行乘法。在應用乘法運算後,創建一個由矩陣組成的新序列。例如,如果初始序列是這樣

|A| * |B| + |C| * |D| * |E| - |F| + |G| * |H| 

處理乘法後的順序是這樣的:

|A*B| + |C*D*E| - |F| + |G*H| 

這從序列中刪除所有乘法,帶給你一個問題,你已經知道如何解決。

注:您的代碼有一個差一錯誤:當j等於countermatrices[j+1]引用的元件一個過去matrices[]數組的末尾。

您可以通過在循環內檢查j+1 < counter來解決此問題。另一種方法是將matrices[0]複製到temp中,而不是執行不受約束的初始操作。通過這種方式,您可以在零處啓動j,以確保代碼即使對於單個矩陣的「退化」情況也能正常工作。

+0

謝謝你,第一個內存解決方案做了竅門,不再有內存泄漏,因此只有原始問題仍然存在 - 操作的順序:) – Welsy

+0

另外 - 這是一個聰明的想法,我怎麼沒有想到這一點。我想我會在研究上面提出的解決方案之前嘗試實現這一點。 – Welsy

+0

@Welsy如果你有括號,抽象語法樹就會被需要。既然你的情況非常簡單,那麼簡單的乘法優先解決方案應該可以工作。 – dasblinkenlight

0
votes
answers
9 views
+10

細胞是公式嗎?在googlescript

0

如果所選單元格是公式,我想要執行一個操作,該怎麼辦?細胞是公式嗎?在googlescript

某些命令,如Google表格的isformula()。

例: 如果(細胞== 「公式」?){使事情} 其他{使事情}

+0

的'gas'標記是GNU彙編。請使用適當的標籤編輯您的問題。 –

沙发
0
1

功能getFormula()可以得心應手:

getFormula()

輸出。字符串

如果單元格爲空或不包含公式,則返回該範圍的左上角單元格的公式(A1表示法)或空字符串。

請嘗試:

if (range.getFormula().substring(0, 1) === '=' 
{ 
    // there is a formula 
} 

substring(0,1)獲得左側符號:

https://www.w3schools.com/jsref/jsref_substring.asp

0
votes
answers
9 views
+10

我的getLocation方法總是返回null

-4

我正在製作一個應用程序來獲取用戶位置並將其顯示在Google地圖上,但由於getLocation方法返回null值,應用程序總是崩潰,任何人都可以告訴我什麼是問題?我的getLocation方法總是返回null

的Manifest.xml

<?xml version="1.0" encoding="utf-8"?> 

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.android.getyourlocation"> 

<!-- 
    The ACCESS_COARSE/FINE_LOCATION permissions are not required to use 
    Google Maps Android API v2, but you must specify either coarse or fine 
    location permissions for the 'MyLocation' functionality. 
--> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:roundIcon="@mipmap/ic_launcher_round" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 

    <!-- 
     The API key for Google Maps-based APIs is defined as a string resource. 
     (See the file "res/values/google_maps_api.xml"). 
     Note that the API key is linked to the encryption key used to sign the APK. 
     You need a different API key for each encryption key, including the release key that is used to 
     sign the APK for publishing. 
     You can define the keys for the debug and release targets in src/debug/ and src/release/. 
    --> 
    <meta-data 
     android:name="com.google.android.geo.API_KEY" 
     android:value="@string/google_maps_key" /> 

    <activity 
     android:name=".MapsActivity" 
     android:label="@string/title_activity_maps"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

,這是創建用戶

package com.example.android.getyourlocation; 

import android.Manifest; 
import android.app.Service; 
import android.content.Context; 
import android.content.Intent; 
import android.content.pm.PackageManager; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.Bundle; 
import android.os.IBinder; 
import android.support.v4.content.ContextCompat; 
import android.util.Log; 

/** 
* Created by Hazem_Khaled on 2017-11-24. 
*/ 

public class GpsManager extends Service implements LocationListener { 

private final Context context; 
protected LocationManager mLocationManager; 

boolean isGpsEnabled; 
boolean isNetworkEnable; 
boolean canGetLocation; 

Location mLocation; 

public GpsManager(Context context) { 
    this.context = context; 
    this.isGpsEnabled=false; 
    this.isNetworkEnable=false; 
    this.canGetLocation=false; 

} 

public Location getLocation(){ 
    try { 
     mLocationManager = (LocationManager) context.getSystemService(LOCATION_SERVICE); 

     //to find Location via GPS 
     String provider=LocationManager.GPS_PROVIDER; 
     isGpsEnabled=mLocationManager.isProviderEnabled(provider); 

     //to find Location via Network 
     provider=LocationManager.NETWORK_PROVIDER; 
     isNetworkEnable=mLocationManager.isProviderEnabled(provider); 

     if (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED 
       || ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) { 

      //process to find Location via GPS 
      if(isGpsEnabled){ 
       if(mLocation == null){ 
        mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,10000,10,this); 
        if (mLocationManager != null) 
         mLocation=mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
       } 
      } 

      //if mLocation still null this means that user location could not be found via GPS then we will use the Network to get user Location 
      if(mLocation == null){ 
       if(isNetworkEnable){ 
        mLocationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,10000,10,this); 
        if (mLocationManager != null) 
         mLocation=mLocationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
       } 
      } 
     } 
    }catch (Exception e){ 
     Log.e("Error : ","in getLocation Method"); 
     e.printStackTrace(); 
    } 
    return mLocation; 
} 

public IBinder onBind(Intent intent) { 
    return null; 
} 


public void onLocationChanged(Location location) { 

} 

public void onStatusChanged(String provider, int status, Bundle extras) { 

} 

public void onProviderEnabled(String provider) { 

} 

public void onProviderDisabled(String provider) { 

} 

}

獲得位置我GpsManager.java類,這是我的MapsActivity.java

package com.example.android.getyourlocation; 

import android.location.Location; 
import android.support.v4.app.FragmentActivity; 
import android.os.Bundle; 

import com.google.android.gms.maps.CameraUpdateFactory; 
import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.OnMapReadyCallback; 
import com.google.android.gms.maps.SupportMapFragment; 
import com.google.android.gms.maps.model.LatLng; 
import com.google.android.gms.maps.model.MarkerOptions; 

public class MapsActivity extends FragmentActivity implements 
OnMapReadyCallback { 

private GoogleMap mMap; 

private Location mLocation; 
private GpsManager mGpsManager; 

double latitude; 
double longitude; 

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

    mGpsManager = new GpsManager(getApplicationContext()); 
    mLocation = mGpsManager.getLocation(); 


    latitude = mLocation.getLatitude(); 
    longitude = mLocation.getLongitude(); 

    // Obtain the SupportMapFragment and get notified when the map is ready to be used. 
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
      .findFragmentById(R.id.map); 
    mapFragment.getMapAsync(this); 
} 


/** 
* Manipulates the map once available. 
* This callback is triggered when the map is ready to be used. 
* This is where we can add markers or lines, add listeners or move the camera. In this case, 
* we just add a marker near Sydney, Australia. 
* If Google Play services is not installed on the device, the user will be prompted to install 
* it inside the SupportMapFragment. This method will only be triggered once the user has 
* installed Google Play services and returned to the app. 
*/ 
@Override 
public void onMapReady(GoogleMap googleMap) { 
    mMap = googleMap; 

    // Add a marker in Sydney and move the camera 
    LatLng myLocation = new LatLng(latitude, longitude); 
    mMap.addMarker(new MarkerOptions().position(myLocation).title("I Am Here")); 
    mMap.moveCamera(CameraUpdateFactory.newLatLng(myLocation)); 
} 

}

+3

androidhive的另一個受害者所謂的教程 – Selvin

+1

https://stackoverflow.com/a/43082164/115145 – CommonsWare

+0

@Selvin這是肯定的。非常棒。 – ADM

沙发
0
0

有了新的API,你可以試試這個

的build.gradle

implementation 'com.google.android.gms:play-services-location:11.6.0' 

GpsManager.java

public class GpsManager extends LocationCallback { 

    private FusedLocationProviderClient client; 
    private Callback callback; 

    public interface Callback { 
     void onLocation(Location location); 
    } 

    public boolean start(Context context, Callback callback) { 
     this.callback = callback; 
     client = LocationServices.getFusedLocationProviderClient(context); 
     if (!checkLocationPermission(context)) return false; 
     client.requestLocationUpdates(getLocationRequest(), this, null); 
     return true; 
    } 

    public void stop() { 
     client.removeLocationUpdates(this); 
    } 

    @Override 
    public void onLocationResult(LocationResult locationResult) { 
     for (Location location : locationResult.getLocations()) { 
      callback.onLocation(location); 
     } 
    } 

    private boolean checkLocationPermission(Context context) { 
     int permissionCheck = ContextCompat.checkSelfPermission(
       context, android.Manifest.permission.ACCESS_FINE_LOCATION); 
     return permissionCheck == PackageManager.PERMISSION_GRANTED; 
    } 

    private LocationRequest getLocationRequest() { 
     return LocationRequest.create() 
       .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY) 
       .setInterval(30_000L) 
       .setFastestInterval(20_000L); 
    } 
} 

...一次這樣的連接到您的Activity ...

MapsActivity.java

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback, GpsManager.Callback { 

    private static final int PERMISSION_REQUEST_FINE_LOCATION = 1; 
    private GpsManager mGpsManager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     ... 
     mGpsManager = new GpsManager(getApplicationContext(), this); 

     // check if user gave permissions, otherwise ask via dialog 
     if (!checkPermission()) { 
      getLocationPermissions(); 
      return; 
     } 

     mGpsManager.start(); 
     ... 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 
     mGpsManager.stop(); 
    } 

    @Override 
    public void onLocation(Location location) { 
     // do something with your location 
    } 

    // CHECK PERMISSIONS PART 

    private boolean checkPermission() { 
     return isGranted(ActivityCompat.checkSelfPermission(this, ACCESS_FINE_LOCATION)) && 
       isGranted(ActivityCompat.checkSelfPermission(this, ACCESS_COARSE_LOCATION)); 
    } 

    @TargetApi(Build.VERSION_CODES.M) 
    private void getLocationPermissions() { 
     requestPermissions(new String[] {Manifest.permission.ACCESS_FINE_LOCATION}, 
       PERMISSION_REQUEST_FINE_LOCATION); 
    } 

    @Override 
    public void onRequestPermissionsResult(int code, @Nullable String permissions[], @Nullable int[] results) { 
     switch (code) { 
      case PERMISSION_REQUEST_FINE_LOCATION: 
       if (isPermissionGranted(results)) { 
        getLocationRequest(); 
       } 
     } 
    } 

    private boolean isPermissionGranted(int[] results) { 
     return results != null && results.length > 0 && isGranted(results[0]); 
    } 

    private boolean isGranted(int permission) { 
     return permission == PackageManager.PERMISSION_GRANTED; 
    } 
} 

現在,你必須確保在你的

AndroidManifest.xml中

所有權限
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 

<uses-feature android:name="android.hardware.location.gps" /> 
<uses-feature android:name="android.hardware.location.network" /> 

希望它有幫助!

板凳
0
0
  1. 嘗試更新谷歌Play服務

  2. 添加到搖籃,classpath 'com.google.android.gms:play-services-location:11.8.0'

  3. maven { url "https://maven.google.com" },添加此allprojects->倉庫內

  4. 添加implementation 'com.google.android.gms:play-services-location:11.8.0'內的build.gradle的依賴條件(Modeule.app)

0
votes
answers
8 views
+10

如何在django runserver啓動一個線程?

0

我想在django項目runserver成功時啓動一個線程。 我可以在哪裏放置創建線程和啓動代碼? django runserver有沒有鉤子?如何在django runserver啓動一個線程?

+0

Duplicate:http://stackoverflow.com/questions/844570/web-application-background-processes-newbie-design-question,http://stackoverflow.com/questions/1081340/how-do-you-do -something-after-render-the-view-django,http://stackoverflow.com/questions/1986060/where-should-i-place-the-one-time-operation-operation-in-the-django -framework – 2010-01-03 12:34:30

沙发
0
6

你爲什麼要這麼做? runserver僅用於開發,它不應該用於生產。如果你通過Apache運行,它應該爲你管理線程/進程。

板凳
0
0

同意上面的答案,你可能不想這樣做。 Runserver只能用於開發。部署完成後,您需要轉移到Apache/WSGI。在我的開發機器上(我使用runserver的時候),我通常會把它放在一個屏幕會話中,所以它不會阻礙,但是如果我需要看到回溯,我可以將它恢復。